import Mock from 'mockjs' // 导入mockjs
import demoApi from './demo' // 导入我们模拟数据的js文件

const mocks = [
	{
		intercept: true, // 你可能需要一个开关，来使模拟请求与真实请求并存
		fetchs: demoApi
	},
]


// 抄来一个解析地址栏参数解析函数
export function param2Obj (url) {
	const search = url.split('?')[1]
	if (!search) {
		return {}
	}
	return JSON.parse(
		'{"' +
		decodeURIComponent(search)
			.replace(/"/g, '\\"')
			.replace(/&/g, '","')
			.replace(/=/g, '":"')
			.replace(/\+/g, ' ') +
		'"}'
	)
}

// 关键！抄来一个前端模式构建函数（或者你也可以建一个mock server）
export function mockXHR () {
	Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
	Mock.XHR.prototype.send = function () {
		if (this.custom.xhr) {
			this.custom.xhr.withCredentials = this.withCredentials || false

			if (this.responseType) {
				this.custom.xhr.responseType = this.responseType
			}
		}
		this.proxy_send(...arguments)
	}

	function XHR2ExpressReqWrap (respond) {
		return function (options) {
			let result = null
			if (respond instanceof Function) {
				const { body, type, url } = options
				// https://expressjs.com/en/4x/api.html#req
				result = respond({
					method: type,
					body: JSON.parse(body),
					query: param2Obj(url)
				})
			} else {
				result = respond
			}
			return Mock.mock(result)
		}
	}

	for (const i of mocks) {
		if (i.intercept) {
			for (const fetch of i.fetchs) {
				Mock.mock(new RegExp(fetch.url), fetch.type || 'get', XHR2ExpressReqWrap(fetch.response))
			}
		}
	}
}